<?php
/**
 * Core_Record_Row
 * 
 * @author naspeh
 * @version $Id: Row.php 659 2008-06-15 11:34:26Z naspeh $
 */
class Core_Record_Row
{
    /**
     * Обект списка
     *
     * @var Core_Record
     */
    protected $_record;    
    /**
     * Связной Acl ресурс 
     *
     * @var Core_Acl_Resource_Abstract
     */
    protected $_resource;
    /**
     * Флаг четночсти
     *
     * @var true
     */
    protected $_isEven;
    /**
     * Конструктор
     *
     * @param array $fields
     */
    public function __construct(Core_Record $record)
    {
        $this->_record = $record;
    }
    /**
     * Возвращает обьект списка
     *
     * @return Core_Record
     */
    public function getRecord()
    {
        return $this->_record;
    }
    /**
     * Устанавливает объект связного Acl ресурса
     *
     * @param array $values
     * @return Core_Acl_Resource_Abstract
     */
    public function setResource(array $values)
    {
        $class = $this->getRecord()->getAclResourceRowClass();
        $this->_resource = new $class($values);
        return $this;
    }
    /**
     * Возвращает объект связного Acl ресурса
     *
     * @return Core_Acl_Resource_Abstract
     */
    public function getResource()
    {
        return $this->_resource;
    }
    /**
     * Формирует вывод заголовка
     *
     * @return string
     */    
    public function renderHeader()
    {
        $content = '';
        $record = $this->getRecord();
        if ($record->isAllowActions()) {
            $content .= Core_Record_Field::renderHeader();
        }
        foreach ($record->getFields() as $field) {
            $contentHeader = $field->getTitle();
            if ((null !== ($order = $record->getOrder())) && $field->getOrder()) {
                $contentHeader = '<a href="' . $order->next($field->getName()) . '">' . $contentHeader . '</a>';
                if (null !== ($orderField = $order->get($field->getName()))) {
                    $contentHeader .= ($order->isDesc($orderField) ? ' &#8593;' : ' &#8595');
                }
            }
            $content .= $field->renderHeader($contentHeader); 
        }
        if ($record->isActionsRow()) {
            $content .= $field->renderHeader('Действия');
        }
        $content = '<tr>' . PHP_EOL . $content . PHP_EOL . '</tr>' . PHP_EOL;
        return $content;         
    }
    /**
     * Формирует вывод
     *
     * @return string
     */
    public function render()
    {
        $content = '';
        $record = $this->getRecord();
        if ($record->isAllowActions()) {
            $formElement = $record->getForm()->getSubForm('ids')->getElement($this->getResource()->getResourceId());
            $content .= Core_Record_Field::render($formElement->render());
        }
        foreach ($record->getFields() as $field) {
            if (false !== ($value = $this->getResource()->{$field->getName()})) {
                switch ($field->getType()) {
                    case 'boolean':
                        if ($value) {
                        	$value = 'Да';
                        } else {
                        	$value = 'Нет';
                        }
                        break;
                    default:
                        $value = $value;
                        break;
                }
                $content .= $field->render($value); 
            }
        }
        if (!is_null($record->getAclResourceRowClass())) {
            $contentAction = array();
            foreach ($record->getActionsForRow() as $name => $action) {
                $privilege = Core_Acl::getRegisrty()->getAllowPrivileges(Core_Auth::get('id'), $this->getResource()->getResourceId(), $name);
            	if (false !== $privilege) {
            	    if (!$this->getRecord()->isActionsRow()) {
            	    	$this->getRecord()->setIsActionsRow(true);
            	    }
            	    $label = '[' . (!empty($privilege['desc']) ? $privilege['desc'] : $name) . ']';
            	    $href = $action['action'] . '/' . $record->getKeyRow(true) . '/' . $this->getResource()->{$record->getKeyRow()};
            		$contentAction[] = '<a href="/' . $href . '">' . $label . '</a>';
            	}
            }
            $contentAction = implode(' ', $contentAction);
            $content .= $field->render($contentAction);
        }
        $class = '';
        if ($this->isEven()) {
            $class = ' class = "even"';
        }
        $content = '<tr' . $class . '>' . PHP_EOL . $content . PHP_EOL . '</tr>' . PHP_EOL;
        return $content;         
    }
    /**
     * Устанавливает флаг четности
     *
     * @param boolean $isEven
     */
    public function setIsEven($isEven)
    {
        $this->_isEven = (boolean) $isEven;
    }
    /**
     * Возвращает флаг четности
     *
     * @return bollean
     */
    public function isEven()
    {
        return $this->_isEven;
    }
}